package com.tinchos.entidades;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.jdom.Attribute;
import org.jdom.Element;

public class Carrera {
	private String codigo;
	private String nombre;
	private List materiasAprobadas;
	private List materiasCursando;
	
	public Carrera() {
		this.materiasAprobadas = new ArrayList();
		this.materiasCursando = new ArrayList();
	}
	
	public Carrera(String nombre, String codigo) {
		
		this();
		this.nombre = nombre;
		this.codigo = codigo;
		
	}
	
	public void agregarMateriaCursando(MateriaCursando materia) {
	
		this.materiasCursando.add(materia);
	
	}
	
	public void agregarMateriaAprobada(MateriaAprobada materia) {
	
		this.materiasAprobadas.add(materia);
	
	}
	
	/*******************/
	/** Persistencia **/
	/*****************/
	/* Instancia a partir de NodoXML */
	public Carrera(Element nodo) {
		
		this();
		this.codigo = nodo.getAttributeValue("codigo");
		this.nombre = nodo.getAttributeValue("nombre");

		Element aprobadas = nodo.getChild("materiasAprobadas");
		
		Iterator iter = aprobadas.getChildren("materiaAprobada").iterator();
		
		while (iter.hasNext()) {
			
			MateriaAprobada mat = new MateriaAprobada((Element) iter.next());
			this.materiasAprobadas.add(mat);
			
		}
		
		Element cursando = nodo.getChild("materiasCursando");
		
		Iterator iter2 = cursando.getChildren("materiaCursando").iterator();
		
		while (iter2.hasNext()) {
			
			MateriaCursando mat = new MateriaCursando((Element) iter2.next());
			this.materiasCursando.add(mat);
			
		}

		
		
	}
	
	/* NodoXML a partir de instancia */
	public Element obtenerNodo() {
		Element nodo = new Element("carrera");
		nodo.setAttribute(new Attribute("nombre", this.nombre));
		nodo.setAttribute(new Attribute("codigo", this.codigo));
		
		/*Elemento para materias aprobadas*/
		Element aprobadas = new Element("materiasAprobadas");
		nodo.addContent(aprobadas);
		
		Iterator iter = getMateriasAprobadas().iterator();
		
		while (iter.hasNext()) {
			
			aprobadas.addContent(((MateriaAprobada) iter.next()).obtenerNodo());
			
		}
		
		/*Elemento para materias cursando*/
		Element cursando = new Element("materiasCursando");
		nodo.addContent(cursando);
		
		iter = getMateriasCursando().iterator();
		
		while (iter.hasNext()) {
			
			cursando.addContent(((MateriaCursando) iter.next()).obtenerNodo());
		
		}
		
		return nodo;
	}

	/***********************/
	/** Fin Persistencia **/
	/*********************/
	
	
	public List getMateriasAprobadas() {
		return materiasAprobadas;
	}

	public void setMateriasAprobadas(List materiasAprobadas) {
		this.materiasAprobadas = materiasAprobadas;
	}

	public List getMateriasCursando() {
		return materiasCursando;
	}

	public void setMateriasCursando(List materiasCursando) {
		this.materiasCursando = materiasCursando;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	
	
}
